<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8" />
		<base href="../../../" />
		<script src="page.js"></script>
		<link type="text/css" rel="stylesheet" href="page.css" />
	</head>
	<body>
		[page:Material] &rarr;

		<h1>[name]</h1>

		<p class="desc">
			A material for shiny surfaces with specular highlights.<br /><br />

			The material uses a non-physically based
			[link:https://en.wikipedia.org/wiki/Blinn-Phong_shading_model Blinn-Phong]
			model for calculating reflectance. Unlike the Lambertian model used in the
			[page:MeshLambertMaterial] this can simulate shiny surfaces with specular
			highlights (such as varnished wood). [name] uses per-fragment shading.<br /><br />

			Performance will generally be greater when using this material over the
			[page:MeshStandardMaterial] or [page:MeshPhysicalMaterial], at the cost of
			some graphical accuracy.
		</p>

		<iframe
			id="scene"
			src="scenes/material-browser.html#MeshPhongMaterial"
		></iframe>

		<script>

		// iOS iframe auto-resize workaround

		if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {

			const scene = document.getElementById( 'scene' );

			scene.style.width = getComputedStyle( scene ).width;
			scene.style.height = getComputedStyle( scene ).height;
			scene.setAttribute( 'scrolling', 'no' );

		}

		</script>

		<h2>Constructor</h2>

		<h3>[name]( [param:Object parameters] )</h3>
		<p>
			[page:Object parameters] - (optional) an object with one or more
			properties defining the material's appearance. Any property of the
			material (including any property inherited from [page:Material]) can be
			passed in here.<br /><br />

			The exception is the property [page:Hexadecimal color], which can be
			passed in as a hexadecimal string and is `0xffffff` (white) by default.
			[page:Color.set]( color ) is called internally.
		</p>

		<h2>Properties</h2>
		<p>See the base [page:Material] class for common properties.</p>

		<h3>[property:Texture alphaMap]</h3>
		<p>
			The alpha map is a grayscale texture that controls the opacity across the
			surface (black: fully transparent; white: fully opaque). Default is
			null.<br /><br />

			Only the color of the texture is used, ignoring the alpha channel if one
			exists. For RGB and RGBA textures, the [page:WebGLRenderer WebGL] renderer
			will use the green channel when sampling this texture due to the extra bit
			of precision provided for green in DXT-compressed and uncompressed RGB 565
			formats. Luminance-only and luminance/alpha textures will also still work
			as expected.
		</p>

		<h3>[property:Texture aoMap]</h3>
		<p>
			The red channel of this texture is used as the ambient occlusion map.
			Default is null. The aoMap requires a second set of UVs.
		</p>

		<h3>[property:Float aoMapIntensity]</h3>
		<p>
			Intensity of the ambient occlusion effect. Range is 0-1, where `0`
			disables ambient occlusion. Where intensity is `1` and the [page:.aoMap]
			red channel is also `1`, ambient light is fully occluded on a surface.
			Default is `1`.
		</p>

		<h3>[property:Texture bumpMap]</h3>
		<p>
			The texture to create a bump map. The black and white values map to the
			perceived depth in relation to the lights. Bump doesn't actually affect
			the geometry of the object, only the lighting. If a normal map is defined
			this will be ignored.
		</p>

		<h3>[property:Float bumpScale]</h3>
		<p>
			How much the bump map affects the material. Typical ranges are 0-1.
			Default is `1`.
		</p>

		<h3>[property:Color color]</h3>
		<p>[page:Color] of the material, by default set to white (0xffffff).</p>

		<h3>[property:Integer combine]</h3>
		<p>
			How to combine the result of the surface's color with the environment map,
			if any.<br /><br />

			Options are [page:Materials THREE.MultiplyOperation] (default),
			[page:Materials THREE.MixOperation], [page:Materials THREE.AddOperation].
			If mix is chosen, the [page:.reflectivity] is used to blend between the
			two colors.
		</p>

		<h3>[property:Texture displacementMap]</h3>
		<p>
			The displacement map affects the position of the mesh's vertices. Unlike
			other maps which only affect the light and shade of the material the
			displaced vertices can cast shadows, block other objects, and otherwise
			act as real geometry. The displacement texture is an image where the value
			of each pixel (white being the highest) is mapped against, and
			repositions, the vertices of the mesh.
		</p>

		<h3>[property:Float displacementScale]</h3>
		<p>
			How much the displacement map affects the mesh (where black is no
			displacement, and white is maximum displacement). Without a displacement
			map set, this value is not applied. Default is `1`.
		</p>

		<h3>[property:Float displacementBias]</h3>
		<p>
			The offset of the displacement map's values on the mesh's vertices.
			Without a displacement map set, this value is not applied. Default is `0`.
		</p>

		<h3>[property:Color emissive]</h3>
		<p>
			Emissive (light) color of the material, essentially a solid color
			unaffected by other lighting. Default is black.
		</p>

		<h3>[property:Texture emissiveMap]</h3>
		<p>
			Set emissive (glow) map. Default is null. The emissive map color is
			modulated by the emissive color and the emissive intensity. If you have an
			emissive map, be sure to set the emissive color to something other than
			black.
		</p>

		<h3>[property:Float emissiveIntensity]</h3>
		<p>
			Intensity of the emissive light. Modulates the emissive color. Default is
			1.
		</p>

		<h3>[property:Texture envMap]</h3>
		<p>The environment map. Default is null.</p>

		<h3>[property:Euler envMapRotation]</h3>
		<p>
			The rotation of the environment map in radians. Default is `(0,0,0)`.
		</p>

		<h3>[property:Boolean flatShading]</h3>
		<p>
			Define whether the material is rendered with flat shading. Default is
			false.
		</p>

		<h3>[property:Boolean fog]</h3>
		<p>Whether the material is affected by fog. Default is `true`.</p>

		<h3>[property:Texture lightMap]</h3>
		<p>
			The light map. Default is null. The lightMap requires a second set of UVs.
		</p>

		<h3>[property:Float lightMapIntensity]</h3>
		<p>Intensity of the baked light. Default is `1`.</p>

		<h3>[property:Texture map]</h3>
		<p>
			The color map. May optionally include an alpha channel, typically combined
			with [page:Material.transparent .transparent] or [page:Material.alphaTest .alphaTest]. 
			Default is null. The texture map color is modulated by the
			diffuse [page:.color].
		</p>

		<h3>[property:Texture normalMap]</h3>
		<p>
			The texture to create a normal map. The RGB values affect the surface
			normal for each pixel fragment and change the way the color is lit. Normal
			maps do not change the actual shape of the surface, only the lighting. In
			case the material has a normal map authored using the left handed
			convention, the y component of normalScale should be negated to compensate
			for the different handedness.
		</p>

		<h3>[property:Integer normalMapType]</h3>
		<p>
			The type of normal map.<br /><br />

			Options are [page:constant THREE.TangentSpaceNormalMap] (default), and
			[page:constant THREE.ObjectSpaceNormalMap].
		</p>

		<h3>[property:Vector2 normalScale]</h3>
		<p>
			How much the normal map affects the material. Typical ranges are 0-1.
			Default is a [page:Vector2] set to (1,1).
		</p>

		<h3>[property:Float reflectivity]</h3>
		<p>
			How much the environment map affects the surface; also see
			[page:.combine]. The default value is `1` and the valid range is between `0`
			(no reflections) and `1` (full reflections).
		</p>

		<h3>[property:Float refractionRatio]</h3>
		<p>
			The index of refraction (IOR) of air (approximately 1) divided by the
			index of refraction of the material. It is used with environment mapping
			modes [page:Textures THREE.CubeRefractionMapping] and [page:Textures THREE.EquirectangularRefractionMapping]. 
			The refraction ratio should not exceed `1`. Default is `0.98`.
		</p>

		<h3>[property:Float shininess]</h3>
		<p>
			How shiny the [page:.specular] highlight is; a higher value gives a
			sharper highlight. Default is `30`.
		</p>

		<h3>[property:Color specular]</h3>
		<p>
			Specular color of the material. Default is a [page:Color] set to
			`0x111111` (very dark grey).<br /><br />

			This defines how shiny the material is and the color of its shine.
		</p>

		<h3>[property:Texture specularMap]</h3>
		<p>
			The specular map value affects both how much the specular surface
			highlight contributes and how much of the environment map affects the
			surface. Default is null.
		</p>

		<h3>[property:Boolean wireframe]</h3>
		<p>
			Render geometry as wireframe. Default is `false` (i.e. render as flat
			polygons).
		</p>

		<h3>[property:String wireframeLinecap]</h3>
		<p>
			Define appearance of line ends. Possible values are "butt", "round" and
			"square". Default is 'round'.<br /><br />

			This corresponds to the
			[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap 2D Canvas lineCap] 
			property and it is ignored by the [page:WebGLRenderer WebGL] renderer.
		</p>

		<h3>[property:String wireframeLinejoin]</h3>
		<p>
			Define appearance of line joints. Possible values are "round", "bevel" and
			"miter". Default is 'round'.<br /><br />

			This corresponds to the
			[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineJoin 2D Canvas lineJoin] 
			property and it is ignored by the [page:WebGLRenderer WebGL] renderer.
		</p>

		<h3>[property:Float wireframeLinewidth]</h3>
		<p>
			Controls wireframe thickness. Default is `1`.<br /><br />

			Due to limitations of the
			[link:https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf OpenGL Core Profile] 
			with the [page:WebGLRenderer WebGL] renderer on most
			platforms linewidth will always be `1` regardless of the set value.
		</p>

		<h2>Methods</h2>
		<p>See the base [page:Material] class for common methods.</p>

		<h2>Source</h2>

		<p>
			[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
		</p>
	</body>
</html>
